home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 39
/
Aminet 39 (2000)(Schatztruhe)[!][Oct 2000].iso
/
Aminet
/
biz
/
swood
/
FW_AllInOne.lha
/
Makros
/
ObjAusrichten.long
< prev
next >
Wrap
Text File
|
1998-01-17
|
14KB
|
556 lines
/******************************************
* Objekte ausrichten *
* $VER: 3.0 © Heiko Schröder 09.01.98 *
******************************************/
/*alle Objekte werden ausgerichtet;
auch Umrisse und Tabellen
unbegrenztes Undo
Löschen der Undos beim Verlassen
*/
Parse ARG FW
if ~show('L',"rexxreqtools.library") then
if ~addlib('rexxreqtools.library',0,-30,0) then do
'ShowMessage 1 1 "Fehler...." "Benötige Libs:rexxreqtools.library" " A B B R U C H ! !" "Okay" "" ""'
exit
end
IF ~show('L','tritonrexx.library') then
IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN DO
'ShowMessage 2 1 "Fehler...." "Benötige Libs:tritonrexx.library" "" "Abbruch" "" ""'
exit
END
R='0A'X
SIGNAL ON syntax
If open('Hilfe',"S:FW_Paket.prefs","R") then do
HilfeVerz=readln('Hilfe')
Call Close('Hilfe')
End
else HilfeVerz=''
If FW='' then do
Address='FinalW'
Options results
STATUS PORTNAME
FW = result
End
address(FW)
hor.0=4
hor.1="Ohne"
hor.2="Oben"
hor.3="Zentriert"
hor.4="Unten"
ver.0=4
ver.1="Ohne"
ver.2="Links"
ver.3="Zentriert"
ver.4="Rechts"
rel.0=3
rel.1="Zueinander"
rel.2="Zur Seite"
rel.3="Zum Editierbereich"
undos=1
apptags = 'TRCA_Name AOO',
'TRCA_LongName "Objekte ausrichten"',
'TRCA_Info "für FinalWriter"',
'TRCA_Version "3.0 registered"',
'TRCA_Release "3"',
'TRCA_Date "09.01.98"',
'TAG_END'
/*
** Fenster öffnen
*/
windowtags = WindowID(1),
WindowPosition('TRWP_CENTERDISPLAY'),
PubScreenName('FinalWriterPubScreen'),
WindowTitle("Objekte ausrichten"),
WindowFlags('TRWF_NOMINTEXTWIDTH|TRWF_NOSIZEGADGET'),
BeginMenu('Projekt'),
MenuItem('Q_Verlassen',104),
BeginMenu('?'),
MenuItem('?_Info',101),
MenuItem('H_Hilfe',103),
'VertGroupAC',
'Space',
'HorizGroupEC',
'SpaceS',
NamedFrameBox('_Vertikal') 'TRAT_ID 2',
'VertGroupA',
'SpaceS',
'HorizGroup',
'SpaceS',
FWListSelC('ver',2,0) 'TRAT_Flags TRLV_ShowSelected TRAT_MINWIDTH 13',
'SpaceS',
'EndGroup',
'SpaceS',
'EndGroup',
'Space',
NamedFrameBox('_Horizontal') 'TRAT_ID 1',
'VertGroupA',
'SpaceS',
'HorizGroup',
'SpaceS',
FWListSelC('hor',1,0) 'TRAT_Flags TRLV_ShowSelected TRAT_MINWIDTH 13',
'SpaceS',
'EndGroup',
'SpaceS',
'EndGroup',
'SpaceS',
'EndGroup',
'Space',
'HorizGroupEC',
'SpaceS',
NamedFrameBox('Zwischenraum'),
'VertGroupA',
'SpaceS',
'HorizGroupC',
'SpaceS',
TextNR('=='),
'SpaceS',
StringGadget('',4),
TextN(' cm'),
'SpaceB',
TextNR('| |'),
'SpaceS',
StringGadget('',5),
TextN(' cm'),
'SpaceS',
'EndGroup',
'SpaceS',
'EndGroup',
'SpaceS',
'EndGroup',
'SpaceS',
'HorizGroupEC',
'SpaceS',
NamedFrameBox('_Relativ') 'TRAT_ID 3',
'HorizGroupEC',
'SpaceS',
'VertGroupAC',
'SpaceS',
FWListSelC('rel',3,0) 'TRAT_Flags TRLV_ShowSelected TRAT_MINHeight 3',
'SpaceS',
'EndGroup',
'SpaceS',
'EndGroup',
'SpaceS',
'EndGroup',
'Space',
'HorizGroupEC',
'SpaceS',
Button('_Anwenden',7),
'SpaceS',
Button('_Undo',9) 'TRAT_DISABLED 1',
'SpaceS',
Button('Ab_bruch',8),
'SpaceS',
'EndGroup',
'Space',
'EndGroup',
'EndProject'
app = TR_CREATEAPP('TRCA_Name AOO')
/*
** Auf Schließsymbol warten
*/
IF app ~= '00000000'x THEN DO
window1 = TR_OPENPROJECT(app,windowtags)
IF window1 ~= '00000000'x THEN DO
ende = 0
DO WHILE ~ende
CALL TR_WAIT(app,'')
DO WHILE TR_HANDLEMSG(app,'event')
IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende = 1
IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
SELECT
WHEN event.trm_id = 3 THEN what = event.trm_data+1 /*relativ*/
OTHERWISE NOP
END
END
IF event.trm_class = 'TRMS_ACTION' THEN DO
SELECT
WHEN event.trm_id = 7 THEN Do
horiz= TR_GETATTRIBUTE(window1,2,'TRAT_VALUE')
verti= TR_GETATTRIBUTE(window1,1,'TRAT_VALUE')
relat= TR_GETATTRIBUTE(window1,3,'TRAT_VALUE')
offhoriz=TR_GETATTRIBUTE(window1,4,'TROB_STRING')
offverti=TR_GETATTRIBUTE(window1,5,'TROB_STRING')
Call program
END
WHEN event.trm_id = 9 THEN Call programUndo
WHEN event.trm_id = 8 THEN ende=1
WHEN event.trm_id = 101 THEN Call rtezrequest("Aus dem Makro-Paket:"||R||R||"Objekte ausrichten V3.0 für FW"||R||"© 1998 Heiko Schröder","Danke für Ihre Registrierung.","Info","rt_pubscrname=FinalWriterPubScreen")
WHEN event.trm_id = 103 THEN address command "run Multiview PUBSCREEN=FinalWriterPubScreen "||d2c(34)||HilfeVerz||"ObjAusrichten.guide"||d2c(34)
WHEN event.trm_id = 104 THEN ende=1
OTHERWISE NOP
END
END
END
END
CALL TR_CLOSEPROJECT(window1)
END
CALL TR_DELETEAPP(app)
END
ELSE
CALL quit('Kann das Fenster nicht öffnen',10)
Call Fini
Exit
program:
address(FW)
GetDocItemPrefs Decimal
Punkt=Result
If Punkt="Comma" then DocItemPrefs Decimal Period
GraphicTool
nr=1
/*---Schauen, ob Objekte ausgewählt worden sind---*/
Select
When relat=0 then do
CurrentObject
ID=result
Objekt.0=nr; Objekt.nr=ID
If Objekt.1="0" then do
ret=rtezrequest("Kein Objekt ausgewählt...","_Achso","Fehler!","rt_pubscrname=FinalWriterPubScreen")
Return
End
end
When (relat=1 | relat=2) then do
ID=-1
Objekt.0=nr; Objekt.nr=ID /*ID der Seite*/
CurrentObject
ID=result
If ID=0 then do
ret=rtezrequest("Kein Objekt ausgewählt...","_Achso","Fehler!","rt_pubscrname=FinalWriterPubScreen")
Return
End
end
Otherwise NOP
end
/*---IDs der Objekte bestimmen---*/
RedrawOff
FirstObject Selected
ID=result
Call Zaehlen
Do While 1
NextObject ID Selected
ID=result
If ID=0 then Leave
Call Zaehlen
End
address "REXX"
Call TR_SETATTRIBUTE(window1,9,'TRAT_DISABLED',0) /* Undo freigeben*/
address(FW)
/*---Größen aller Grafiken bestimmen---*/
Menge=0
Do i=1 to Objekt.0
if ((i=1) & (relat~=0)) then do
GetPageSetup Width Height
Parse Var result weite.i hoehe.i
Status Page
seite.i=result
/*---Ausrichten an der Seite---*/
if relat=1 then do
left.i=0; top.i=0
end
/*---Ausrichten an Editierbereich---*/
if relat=2 then do
GetSectionSetup Top Bottom Inside Outside
Parse Var result top.i bott left.i outs
weite.i=weite.i-left.i-outs
hoehe.i=hoehe.i-top.i-bott
end
end
/*--- zueinander ausrichten ---*/
else do
GetObjectCoords Objekt.i
Parse Var result seite.i left.i top.i weite.i hoehe.i
undomenge=i
undoid.i=Objekt.i
undoseite.i=seite.i
undoleft.i=left.i
undotop.i=top.i
undoweite.i=weite.i
undohoehe.i=hoehe.i
Call UndoWrite i
GetObjectType Objekt.i
typ=result
/*---Linien/Pfeillinien/TextBlöcken/Polygonen anders handeln->gruppieren---*/
if typ=2|typ=3|typ=7|typ=10 then do
menge=menge+1
copy
Paste
CurrentObject
ID=result
SetObjectCoords ID seite.i left.i top.i weite.i hoehe.i
SelectObject Objekt.i MULTIPLE
Group
weg.0=menge /*Linie die weg muß*/
weg.menge=ID
CurrentObject
ID=result
gruppe.0=menge /*Gruppe die aufgelöst werden muß*/
gruppe.menge=ID
GetObjectCoords ID
Parse Var result seite.i left.i top.i weite.i hoehe.i
altStelle.0=menge
altStelle.menge=i
altID.0=menge
altID.menge=Objekt.i
Objekt.i=ID
end
end
End
If verti="1" then /* oben */
Do i= 2 to Objekt.0
top.i=top.1
seite.i=seite.1
End
If verti="2" then do /* mitte */
mitte=top.1+(hoehe.1/2)
Do i= 2 to Objekt.0
top.i=mitte-(hoehe.i/2)
seite.i=seite.1
End
End
If verti="3" then do /* unten */
unten=top.1+hoehe.1
Do i= 2 to Objekt.0
top.i=unten-hoehe.i
seite.i=seite.1
End
End
If horiz="1" then /* links */
Do i= 2 to Objekt.0
left.i=left.1
End
If horiz="2" then do /* mitte */
mitte=left.1+(weite.1/2)
Do i= 2 to Objekt.0
left.i=mitte-(weite.i/2)
end
End
If horiz="3" then do /* rechts */
rechts=left.1+weite.1
Do i= 2 to Objekt.0
left.i=rechts-weite.i
End
End
/* Objektdaten für Verschiebung - nachbearbeiten*/
If offverti~="" then do /* ok */
If relat=1 then weite.1=0-offverti
If relat=2 then weite.1=0-offverti
Do i=2 to Objekt.0
mass=0
Do y=1 to i-1
mass=mass+weite.y+offverti
end
left.i=left.1+mass
End
End
If offhoriz~="" then do
If relat=1 then hoehe.1=0-offhoriz
If relat=2 then hoehe.1=0-offhoriz
Do i=2 to Objekt.0
mass=0
Do y=1 to i-1
mass=mass+hoehe.y+offhoriz
end
top.i=top.1+mass
End
End
/* Ende des Verschiebung */
Do a=2 to Objekt.0
SetObjectCoords Objekt.a seite.a left.a top.a weite.a hoehe.a
End
Redraw
Do a=1 to menge /*Gruppierungen auflösen und Copies löschen*/
SelectObject gruppe.a
ungroup
DeleteObject weg.a /*Copy löschen*/
i=altStelle.a /*alte Linie wieder den ID zuordnen*/
Objekt.i=altID.a
end
Do a=2 to Objekt.0
SelectObject Objekt.a MULTIPLE
End
if relat=0 then SelectObject Objekt.1 MULTIPLE
RedrawOn
Redraw
undos=undos+1 /* Anzahl der möglichen Undos */
Return
/* ok */
Zaehlen:
If ID~=Objekt.1 then do
nr=nr+1
Objekt.0=nr; Objekt.nr=ID
End
Return
/* UNDOS */
programUndo:
Call UndoRead
TextTool
GraphicTool
Do i=1 to undomenge-1
SetObjectCoords undoid.i undoseite.i undoleft.i undotop.i undoweite.i undohoehe.i
end
Do a=2 to undomenge-1
SelectObject undoid.a MULTIPLE
End
SelectObject undoid.1 MULTIPLE
Redraw
If undos=1 then do
address "REXX"
Call TR_SETATTRIBUTE(window1,9,'TRAT_DISABLED',1)
end
Return
UndoWrite:
Parse ARG i
address "REXX"
speicher="Ram:Undo."||undos
If exists(speicher) then Call Open("FWUndo",speicher,"A")
else Call Open("FWUndo",speicher,"W")
lein=undoid.i undoseite.i undoleft.i undotop.i undoweite.i||undohoehe.i
WriteLn("FWUndo",lein)
Call Close("FWUndo")
Return
UndoRead:
address "REXX"
undos=undos-1
speicher="Ram:Undo."||undos
Call Open("FWUndo",speicher,'R')
i=0
Do Until eof("FWUndo")
i=i+1
lein=ReadLn("FWUndo")
undomenge=i
Parse Var lein undoid.i undoseite.i undoleft.i undotop.i undoweite.i undohoehe.i
end
Call Close("FWUndo")
address command "delete "||d2c(34)||speicher||d2c(34)" QUIET"
Return
Fini:
Do i=1 to undos
speicher="Ram:Undo."
if exists(speicher||i) then address command "delete "||d2c(34)||speicher||i||d2c(34)" QUIET"
end
Return
/*******************************************************************************
** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
*******************************************************************************/
syntax:
address "REXX"
CALL quit('Fehler' rc 'in Zeile' sigl '-' ERRORTEXT(rc)||R||SOURCELINE(sigl)||R||'Bitte informieren Sie den Autor...',20)
/*******************************************************************************
** Script beenden
*******************************************************************************/
quit:
PARSE ARG message,rcode
IF app ~= '00000000'x THEN DO
IF message ~= '' THEN
ret=rtezrequest(message,"_Okay","ACHTUNG!","rt_pubscrname=FinalWriterPubScreen")
CALL TR_DELETEAPP(app)
END
ELSE DO
IF message ~= '' THEN DO
SAY message
SAY
OPTIONS PROMPT 'Bitte <RETURN> drücken'
PULL taste
END
END
Call Fini
address command "flushtrx all"
EXIT(rcode)